package com.ybbase.framework.common.util;

import java.util.*;

/**
 * @author cg
 * @date 2019-12-01 18:18
 * @since cloud2.0
 */
public class ArrayUtil<T> {
    /**
     * 求并集
     * @param m 第一个数组
     * @param n 第二个数组
     * @author cg
     * @return T[] 返回数组
     * @since cloud2.0
     */
    public   T[] getUnion(T[] m, T[] n){
        // 将数组转换为set集合
        Set<T> set1 = new HashSet<T>(Arrays.asList(m));
        Set<T> set2 = new HashSet<T>(Arrays.asList(n));
        // 合并两个集合
        set1.addAll(set2);
        T[] arr = null;
        return set1.toArray(arr);
    }

    /**
     * 求交集
     * @param m 第一个数组
     * @param n 第二个数组
     * @author cg
     * @return T[] 返回数组
     * @since cloud2.0
     */
    public  T[] getIntersection(T[] m, T[] n){
        List<T> rs = new ArrayList<T>();
        // 将较长的数组转换为set
        Set<T> set = new HashSet<T>(Arrays.asList(m.length > n.length ? m : n));
        // 遍历较短的数组，实现最少循环
        for (T i : m.length > n.length ? n : m)
        {
            if (set.contains(i))
            {
                rs.add(i);
            }
        }
        T[] arr = null;
        return rs.toArray(arr);
    }

    /**
     * 求差集
     * @param m 第一个数组
     * @param n 第二个数组
     * @author cg
     * @return T[] 返回数组
     * @since cloud2.0
     */
    public T[] getDifferenceSet(T[] m, T[] n){
        // 将较长的数组转换为set
        Set<T> set = new HashSet<T>(Arrays.asList(m.length > n.length ? m : n));
        // 遍历较短的数组，实现最少循环
        for (T i : m.length > n.length ? n : m)
        {
            // 如果集合里有相同的就删掉，如果没有就将值添加到集合
            if (set.contains(i))
            {
                set.remove(i);
            } else {
                set.add(i);
            }
        }
        T[] arr = null;
        return set.toArray(arr);
    }
    /**
     * 将字符串转换为Integer
     * @param str 字符串
     * @param sprStr 分割字符
     * @return Integer[]
     * @author cg
     * @date 2019-12-01 18:36
     * @since cloud2.0
    */
    public static Integer[] getStrArrToIntArr(String str,String sprStr){
        Integer[] prc = {};
        String[] strArr = str.split(sprStr);
        if (strArr.length>0){
            List<Integer> list = new ArrayList<>();
            for (String s:strArr){
                list.add(Integer.parseInt(s));
            }
            prc=list.toArray(new Integer[list.size()]);
        }
        return prc;
    }

    /**
     * 取出中括号取得里面的值
     * @param str 需要去掉的字符串
     * @return
     * @author cg
     * @date 2019-12-01 19:37
     * @since cloud2.0
    */
    public static String removeStrArrSymbol(String str){
        return str.replace("[","" ).replace("]", "");
    }

    /**
     * 为字符串增加括号
     * @param str 需要去掉的字符串
     * @return
     * @author cg
     * @date 2019-12-01 19:37
     * @since cloud2.0
     */
    public static String addStrArrSymbol(String str){
        return "["+str+"]";
    }

}
